﻿#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include "MyArray.h"
using namespace std;

void testMyArray()
{
	//1.堆区创建数组；
	MyArray* array = new MyArray(30);//有参函数调用！

	//8.MyArray* arrayCopy(array);等同于MyArray* arrayCopy = array;
	//MyArray* arrayCopy(array);

	//5.new方式指定调用拷贝构造；上面的写法不会调用拷贝构造，需要传一个对象，而不是指针；
	MyArray* arrayCopy = new MyArray(*array);//拷贝构造调用！

	//6.构造函数返回的本体，就是*array获得具体对象值，再调用拷贝构造，得到新对象；
	MyArray arrayObject = *array;//拷贝构造调用！

	//7.这个是声明一个指针，和array执行的地址相同，所以不会调用拷贝构造；delete删除array就等于删除arrayCopy，
		//所以直接崩了；
	//MyArray* arrayCopy = array;
	delete array;//调用析构函数！

	//2.尾插法测试；
	for (int i = 0; i < 10; ++i)
	{
		arrayCopy->push_Back(i);
	}
	//3.获取数据测试；
	for (int i = 0; i < 10; ++i)
	{
		cout << arrayCopy->getData(i) << endl;//0,1,..,9
	}

	//4.设置值测试；
	arrayCopy->setData(0, 1000);
	cout << arrayCopy->getData(0) << endl;//1000

	//9.获取数组大小；
	cout << "arrayCopy的数组大小为：" << arrayCopy->getSize() << endl;//10

	//10.获取数组容量；
	cout << "arrayCopy的数组容量为：" << arrayCopy->getCapacity() << endl;//30

	//11.获取已设置的数组内容；用[]进行设置和访问数组；
	/*cout << arrayCopy[0] << endl;
	arrayCopy[0] = 2000;*/
	arrayObject.push_Back(10000);
	cout << arrayObject.getData(0) << endl;//10000
	cout << arrayObject[0] << endl;//10000
	arrayObject[0] = 200;//10000=200;
	cout << arrayObject[0] << endl;//200

	cout << arrayCopy->getData(0) << endl;//1000
}

//main276：强化训练数组类的封装
int main276()
{
	testMyArray();//有参函数调用！
	//拷贝构造调用！
	//调用析构函数！

	system("pause");
	return EXIT_SUCCESS;
}